package com.vegetable.modules.finance.service;

import com.vegetable.modules.vo.finance.ArrearsStatisticsVO;
import com.vegetable.modules.vo.finance.ArrearsDetailVO;
import java.math.BigDecimal;
import java.util.List;

/**
 * 欠款统计服务接口
 */
public interface ArrearsService {
    
    /**
     * 计算公司总欠款
     * @param agentId 代办人ID（可选）
     * @param customerId 客户ID（可选）
     * @param regionId 地域标志（可选）
     * @return 总欠款金额
     */
    BigDecimal calculateTotalArrears(Long agentId, Long customerId, Integer regionId);
    
    /**
     * 计算代办欠款
     * @param agentId 代办人ID（可选）
     * @param regionId 地域标志（可选）
     * @return 代办欠款金额
     */
    BigDecimal calculateAgentArrears(Long agentId, Integer regionId);
    
    /**
     * 计算采购欠款
     * @param customerId 客户ID（可选）
     * @param regionId 地域标志（可选）
     * @return 采购欠款金额
     */
    BigDecimal calculatePurchaseArrears(Long customerId, Integer regionId);
    
    /**
     * 计算代办未对账金额
     * @param agentId 代办人ID（可选）
     * @param regionId 地域标志（可选）
     * @return 代办未对账金额
     */
    BigDecimal calculateAgentUnreconciled(Long agentId, Integer regionId);
    
    /**
     * 计算代办已对账未付款金额
     * @param agentId 代办人ID（可选）
     * @param regionId 地域标志（可选）
     * @return 代办已对账未付款金额
     */
    BigDecimal calculateAgentUnpaid(Long agentId, Integer regionId);
    
    /**
     * 计算采购未对账金额
     * @param customerId 客户ID（可选）
     * @param regionId 地域标志（可选）
     * @return 采购未对账金额
     */
    BigDecimal calculatePurchaseUnreconciled(Long customerId, Integer regionId);
    
    /**
     * 计算采购已对账未付款金额
     * @param customerId 客户ID（可选）
     * @param regionId 地域标志（可选）
     * @return 采购已对账未付款金额
     */
    BigDecimal calculatePurchaseUnpaid(Long customerId, Integer regionId);
    
    /**
     * 获取欠款统计详情
     * @param agentId 代办人ID（可选）
     * @param customerId 客户ID（可选）
     * @param regionId 地域标志（可选）
     * @return 欠款统计详情
     */
    ArrearsStatisticsVO getArrearsStatistics(Long agentId, Long customerId, Integer regionId);
    
    /**
     * 批量获取多个代办人的欠款统计
     * @param agentIds 代办人ID列表
     * @param regionId 地域标志（可选）
     * @return 欠款统计列表
     */
    List<ArrearsStatisticsVO> getAgentArrearsList(List<Long> agentIds, Integer regionId);
    
    /**
     * 批量获取多个客户的欠款统计
     * @param customerIds 客户ID列表
     * @param regionId 地域标志（可选）
     * @return 欠款统计列表
     */
    List<ArrearsStatisticsVO> getCustomerArrearsList(List<Long> customerIds, Integer regionId);
    
    /**
     * 获取欠款明细列表
     * @param regionId 地域标志（可选）
     * @return 欠款明细列表
     */
    List<ArrearsDetailVO> getArrearsDetailList(Integer regionId);
}